IN, OUT, এবং INOUT Parameters এর ব্যবহার

CallableStatement (Stored Procedures) - জেডিবিসি (JDBC) - Java Technologies

315

JDBC (Java Database Connectivity) API ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয় এবং এটি SQL কুয়েরি চালানোর জন্য PreparedStatement ব্যবহার করার সুযোগ প্রদান করে। IN, OUT, এবং INOUT প্যারামিটারগুলি Stored Procedures এবং PreparedStatements-এ ব্যবহৃত হয় ডেটাবেসের সাথে যোগাযোগ করার জন্য, যা SQL কুয়েরির মধ্যে প্যারামিটারিক ডেটা অন্তর্ভুক্ত করে।

  • IN parameters: কেবল ইনপুট প্যারামিটার হিসেবে ব্যবহার হয় (জাভা প্রোগ্রাম থেকে ডেটাবেসে ডেটা পাঠাতে)।
  • OUT parameters: কেবল আউটপুট প্যারামিটার হিসেবে ব্যবহার হয় (ডেটাবেস থেকে ফলাফল রিটার্ন করতে)।
  • INOUT parameters: ইনপুট এবং আউটপুট উভয় হিসেবেই ব্যবহৃত হয় (যা ইনপুট হিসেবে পাঠানো হয় এবং পরে পরিবর্তিত হয়ে আউটপুট হিসেবে রিটার্ন হয়)।

এখানে, আমরা IN, OUT, এবং INOUT প্যারামিটারগুলির ব্যবহার এবং তাদের কোড উদাহরণ দেখাব।


1. IN Parameters

IN parameters হল সেই প্যারামিটার যেগুলি PreparedStatement বা Stored Procedure-এ ডেটাবেসে পাঠানোর জন্য ব্যবহৃত হয়। সাধারণত IN parameters এর মাধ্যমে আমরা SQL কুয়েরি বা স্টোরড প্রোসিজারের ইনপুট ডেটা প্রদান করি।

উদাহরণ:

যদি আমরা একটি PreparedStatement ব্যবহার করি, যেখানে একটি IN parameter হিসাবে id পাঠানো হচ্ছে:

import java.sql.*;

public class JdbcInParameterExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try {
            Connection conn = DriverManager.getConnection(url, username, password);
            String sql = "SELECT name, age FROM employees WHERE id = ?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            
            // IN parameter সেট করা
            stmt.setInt(1, 101); // প্রথম প্যারামিটার (id) 101 হিসেবে সেট করা
            
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("Name: " + name + ", Age: " + age);
            }
            rs.close();
            stmt.close();
            conn.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

এখানে, id হল IN parameter এবং এটি PreparedStatement এর মাধ্যমে SQL কুয়েরিতে পাঠানো হয়েছে। stmt.setInt(1, 101) ব্যবহার করে IN parameter কে সেট করা হয়েছে।


2. OUT Parameters

OUT parameters হল সেই প্যারামিটার যেগুলি স্টোরড প্রোসিজার থেকে আউটপুট হিসেবে ডেটা ফেরত নিয়ে আসে। আপনি CallableStatement ব্যবহার করে OUT parameters সংগ্রহ করতে পারেন।

উদাহরণ:

ধরা যাক, একটি স্টোরড প্রোসিজার রয়েছে যা OUT parameter হিসেবে একটি total_salary রিটার্ন করে:

DELIMITER CREATEPROCEDUREGetTotalSalary(INempidINT,OUTtotalsalaryDECIMAL)BEGINSELECTSUM(salary)INTOtotalsalaryFROMemployeesWHEREid=empid;END

CREATE PROCEDURE GetTotalSalary (IN emp_id INT, OUT total_salary DECIMAL)
BEGIN
    SELECT SUM(salary) INTO total_salary FROM employees WHERE id = emp_id;
END

DELIMITER ;

এখন, Java কোডে এই স্টোরড প্রোসিজার কল করা হবে:

import java.sql.*;

public class JdbcOutParameterExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try {
            Connection conn = DriverManager.getConnection(url, username, password);
            String sql = "{CALL GetTotalSalary(?, ?)}";
            CallableStatement stmt = conn.prepareCall(sql);

            // IN parameter সেট করা
            stmt.setInt(1, 101); // Employee ID

            // OUT parameter সেট করা
            stmt.registerOutParameter(2, Types.DECIMAL); // Total salary as OUT parameter

            stmt.execute();
            
            // OUT parameter থেকে মান রিট্রাইভ করা
            double totalSalary = stmt.getDouble(2);
            System.out.println("Total Salary: " + totalSalary);

            stmt.close();
            conn.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

এখানে, stmt.registerOutParameter(2, Types.DECIMAL) দ্বারা OUT parameter রেজিস্টার করা হয়েছে এবং stmt.getDouble(2) এর মাধ্যমে আউটপুট ডেটা পাওয়া যাচ্ছে।


3. INOUT Parameters

INOUT parameters হল প্যারামিটার যেগুলি ইনপুট হিসেবে ডেটা গ্রহণ করে এবং পরবর্তীতে আউটপুট হিসেবে ফলাফল প্রদান করে। আপনি CallableStatement ব্যবহার করে এই প্যারামিটারটি সেট করতে পারেন। এটি IN এবং OUT উভয় হিসেবে কাজ করে।

উদাহরণ:

ধরা যাক, একটি স্টোরড প্রোসিজার রয়েছে যা একটি INOUT parameter ব্যবহার করে। এই প্রোসিজারটি ইনপুট হিসাবে একটি বোনাসের মান নেয় এবং সঠিকভাবে তার সাথে salary যোগ করে আউটপুট প্রদান করে।

DELIMITER CREATEPROCEDUREUpdateSalary(INOUTempidINT,INOUTsalaryDECIMAL)BEGINUPDATEemployeesSETsalary=salary+1000WHEREid=empid;SELECTsalaryINTOsalaryFROMemployeesWHEREid=empid;END

CREATE PROCEDURE UpdateSalary (INOUT emp_id INT, INOUT salary DECIMAL)
BEGIN
    UPDATE employees SET salary = salary + 1000 WHERE id = emp_id;
    SELECT salary INTO salary FROM employees WHERE id = emp_id;
END

DELIMITER ;

Java কোডের মাধ্যমে INOUT parameter ব্যবহার করা হবে:

import java.sql.*;

public class JdbcInOutParameterExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try {
            Connection conn = DriverManager.getConnection(url, username, password);
            String sql = "{CALL UpdateSalary(?, ?)}";
            CallableStatement stmt = conn.prepareCall(sql);

            // INOUT parameter সেট করা
            stmt.setInt(1, 101); // Employee ID
            stmt.setDouble(2, 5000.0); // Initial salary

            // INOUT parameter রেজিস্টার করা
            stmt.registerOutParameter(1, Types.INTEGER); // Employee ID (INOUT)
            stmt.registerOutParameter(2, Types.DECIMAL); // Salary (INOUT)

            stmt.execute();
            
            // INOUT parameter থেকে মান রিট্রাইভ করা
            int empId = stmt.getInt(1); // Get the updated employee ID
            double updatedSalary = stmt.getDouble(2); // Get the updated salary

            System.out.println("Employee ID: " + empId);
            System.out.println("Updated Salary: " + updatedSalary);

            stmt.close();
            conn.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

এখানে, INOUT parameter হিসেবে emp_id এবং salary দুটি প্যারামিটার ব্যবহৃত হচ্ছে। এই প্যারামিটারগুলির মান ইনপুট হিসেবে পাঠানো হচ্ছে এবং প্রোসিজারের মাধ্যমে আউটপুট হিসেবে পরিবর্তিত মান ফিরে আসছে।


Conclusion

IN, OUT, এবং INOUT parameters JDBC-তে ডেটাবেসের সাথে যোগাযোগ করার সময় খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে। IN parameters ব্যবহার করে আপনি ইনপুট ডেটা পাঠাতে পারেন, OUT parameters ব্যবহার করে আপনি ডেটাবেস থেকে আউটপুট ডেটা ফেরত পেতে পারেন এবং INOUT parameters ব্যবহার করে আপনি ডেটা প্রক্রিয়া করার পর আউটপুট হিসেবে ফেরত পেতে পারেন। JDBC তে CallableStatement ব্যবহার করে এগুলি কার্যকরভাবে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...